home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / i / internet / software / tuwtcpsr / gemhook.s < prev    next >
Encoding:
Text File  |  1993-02-18  |  3.1 KB  |  166 lines

  1.     export     ST_GEMDOS
  2.     export    TT_GEMDOS
  3.     export    OLD_GEMDOS
  4.     export  NET_TICK
  5.     export  OLD_TICK
  6.     export  TRP5SIM
  7.     export  clock
  8.     export  NEWSTACKBOTTOM
  9.     export    pkt_mux
  10.     
  11.     import    net_demux            
  12.     import    GEM_TAB
  13.     import  net_demux
  14.     import  net_mux
  15.     
  16.     super
  17.     
  18.     
  19.     data
  20.     
  21. NEWSTACKBOTTOM:    .DS.B 4096     ; new supervisorstack
  22. NEWSTACKTOP: .DC.W    0        ; top of new supervisor stack
  23. IP_SEM:        .DC.W    0        ;reentrance semaphore
  24. OLD_STACK:    .DC.L    0        ;old stack pointer
  25.  
  26.     text
  27.     
  28.  
  29.             .DC.B   'XBRAINET'
  30.             .EVEN
  31. OLD_GEMDOS:    .DC.L    0        ;old gemdos vector
  32.  
  33.  
  34. ST_GEMDOS:    movea.l a7,a0 
  35.             btst.b  #5,(a7) 
  36.             bne        ST_SUPER    ; call from supervisor mode
  37.             move    usp,a0
  38.             bra        ST_SWITCH
  39. ST_SUPER:    addq.l    #6,a0
  40.  
  41. ST_SWITCH:    move.w    (a0),d0        ; 612, 620-623, 630-635
  42.             cmpi.w    #612,d0    
  43.             beq        ST_MYGEM
  44.             cmpi.w    #620,d0
  45.             bcs        ST_OLDGEM
  46.             cmpi.w    #624,d0
  47.             bcs        ST_MYGEM
  48.  
  49.             cmpi.w    #630,d0
  50.             bcs        ST_OLDGEM
  51.             cmpi.w    #636,d0
  52.             bcs        ST_MYGEM
  53.  
  54. ST_OLDGEM:    movea.l OLD_GEMDOS,a0 
  55.             jmp        (a0)            ; let others do the work
  56.             
  57.             
  58. ST_MYGEM:    tas        IP_SEM
  59.             beq        ST_OK
  60.             moveq.l    #-50,d0            ; recursive call not allowed
  61.             bra        ST_EXIT
  62.             
  63. ST_OK:        move.l    a7,OLD_STACK
  64.             movea.l    #NEWSTACKTOP,a7
  65.             movem.l d1-a6,-(a7) 
  66.             subi.w  #612,d0 
  67.             beq        ST_DOIT
  68.             subq.w    #7,d0
  69.             cmpi.w    #5,d0
  70.             bcs        ST_DOIT
  71.             subq.w    #6,d0
  72.             
  73. ST_DOIT:    asl.w   #2,d0 
  74.             lea     GEM_TAB,a1 
  75.             movea.l 0(a1,d0),a1 
  76.             addq.l    #2,a0            ; pointer to parameter on stack
  77.             jsr     (a1)
  78.             movem.l (a7)+,d1-a6 
  79.             movea.l    OLD_STACK,a7
  80.             clr.w   IP_SEM            ; clear semaphor
  81. TRP5SIM:
  82. ST_EXIT:    rte 
  83.  
  84. TT_GEMDOS:    movea.l a7,a0 
  85.             btst.b  #5,(a7) 
  86.             bne        TT_SUPER    ; call from supervisor mode
  87.             move    usp,a0
  88.             bra        ST_SWITCH
  89. TT_SUPER:    addq.l    #8,a0
  90.             bra        ST_SWITCH
  91.  
  92. save:    dc.l 0
  93. time:    dc.l 0
  94.  
  95.             .DC.L    'XBRAINET'
  96. OLD_TICK:    .DC.L    0
  97.  
  98. NET_TICK:   
  99.             tas        IP_SEM                ; test semaphore
  100.             bne        TICK_EXIT            ; inet busy -> jump
  101.  
  102.             move    (a7),savesr
  103.             move.l    2(a7),savepc
  104.             move.l    #myrout,2(a7)
  105.  
  106.             move.l    d0,-(a7)
  107.             move    savesr,d0
  108.             and        #$f800,d0
  109.             or        #$2000,d0
  110.             move    d0,4(a7)
  111.             move.l    (a7)+,d0
  112.             
  113.             ;sub.l    a0,a0
  114.             ;move.l    $4ba,d0
  115.             ;move.l    d0,save
  116.             ;jsr        net_demux
  117.             ;move.l    $4ba,d0
  118.             ;sub.l    save,d0
  119.             ;move.l    d0,time
  120.             ;movem.l    (a7)+,d0-a6
  121.             ;movea.l    OLD_STACK,a7        ; switch back to old stack
  122.             ;clr.w    IP_SEM                ; free semaphore
  123.  
  124. TICK_EXIT:
  125.             move.l    OLD_TICK,-(a7)
  126.             rts                            ; jump to old handler
  127.             
  128. myrout:        
  129.             move.l    a7,OLD_STACK
  130.             movea.l    #NEWSTACKTOP,a7        ; install new stack
  131.             movem.l    d0-a6,-(a7)            ;
  132.             
  133.             sub.l    a0,a0
  134.             ;jsr        net_demux
  135.             movem.l    (a7)+,d0-a6
  136.             move.l    OLD_STACK,a7
  137.  
  138.             move.l    savepc,-(a7)
  139.             move    savesr,-(a7)
  140.             clr        IP_SEM
  141.             rte
  142.             ;bra        TICK_EXIT
  143.             
  144. clock:      move.l $4ba,d0                ; 
  145.             rts
  146.  
  147. savepc:        dc.l 0
  148. savesr:        dc.l 0
  149.  
  150. pkt_mux:    rts
  151.             tas        IP_SEM
  152.             bne        IP_RET
  153.             
  154.             move.l    a7,ipstack
  155.             movea.l    #NEWSTACKTOP,a7
  156.             clr.l    d0
  157.             clr.l    a0
  158.             jsr        net_demux
  159.             move.l    ipstack,a7
  160.             clr        IP_SEM
  161. IP_RET:
  162.             rts
  163.  
  164. ipstack:    dc.l    0
  165.  
  166.